package ufc.si.pet.beans;

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import ufc.si.pet.dao.implementacoes.AdministradorAtividadeJpaDAO;
import ufc.si.pet.dao.interfaces.AdministradorAtividadeDAO;
import ufc.si.pet.entidades.AdministradorAtividade;
import ufc.si.pet.exceptions.ErroLoginException;

/**
 * @author guilherme
 *
 */

@RequestScoped
@ManagedBean(name = "loginBean")
public class LoginBean implements Serializable{
	
	public static final String ADMINISTRADOR_ATIVIDADE = "ADMINISTRADOR_ATIVIDADE";
	public static final String GERENTE_SISTEMA = "GERENTE_SISTEMA";
	private String login;
	private String senha;
	private AdministradorAtividade admin;
	
	public LoginBean() {
		admin = new AdministradorAtividade();
	}

	public String fazerLogin(){
		
		AdministradorAtividadeDAO dao = new AdministradorAtividadeJpaDAO();
		
		try{
			this.admin = dao.getAdminByLoginSenha(login, senha);
			HttpSession session =  (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(true);
			session.setAttribute("usuario", admin);
			if(admin.isGerente()){
				session.setAttribute("tipo", LoginBean.GERENTE_SISTEMA);
				return "/admin/lista-adminstradores-atividades?faces-redirect=true";
			}else{
				session.setAttribute("tipo", LoginBean.ADMINISTRADOR_ATIVIDADE);
				return "/usuario/minhas-atividades?faces-redirect=true";
			}
			
			
		}catch(ErroLoginException e){
			FacesContext.getCurrentInstance().addMessage(
					"Aviso",
					new FacesMessage("Falha de autenticação",
							"login ou senha inválidos!"));
		}
		
		return "?faces-redirect=true";
	}
	
	public String realizarLogout() {

		HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(false);

		if (session != null) {
			session.invalidate();
		}

		return "/login?faces-redirect=true";
	}

		
	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public AdministradorAtividade getAdmin() {
		return admin;
	}

	public void setAdmin(AdministradorAtividade admin) {
		this.admin = admin;
	}

}
